package fwmpc.adapter;

import fwhmc.rt.IHttpRestTemplateManager;
import fwmpc.exception.WeiXinRuntimeException;
import fwmpc.interact.DefaultInteraction;
import fwmpc.interact.IWeiXinInteraction;
import fwmpc.resource.IWeiXinAttributeItem;
import fwmpc.resource.IWeiXinCommonAttribute;
import fwmpc.resource.SimplenessWeiXinCommonAttributeServe;
import fwmpc.service.IWeiXinManagerService;
import fwmpc.service.impl.WeiXinWebManagerService;
import fwmpc.store.IWeiXinAttributeStore;
import fwmpc.store.WeiXinInStorageService;

/**
 * 类描述:  简单微信单服务配置适配器抽象
 * <br />
 * 使用注解注入——微信处理
 *
 * @author 王雷
 * @version 1.0.0
 * <br />
 * @Configuration
 * @EnableWeiXinManagerServer <br />
 * 在抽象类中实现config方法注入自定义的处理逻辑
 * @date 2022/6/30 0030 上午 11:01多平台
 */
public class DefaultWeiXinServerConfigurerAdapter implements IWeiXinServerConfigurerAdapter {

    /**
     * 功能描述：微信属性接口对象
     *
     * @date : 2022/7/22 0022 下午 6:11
     */
    protected IWeiXinCommonAttribute giveWeiXinCommonAttribute(){
        return new SimplenessWeiXinCommonAttributeServe();
    }

    /**
     * 功能描述：配置微信属性
     *
     * @return 微信属性对象
     * @author : 王雷
     * @date : 2021/1/18 0018 下午 3:17
     */
    @Override
    public final IWeiXinCommonAttribute attributeConfig() {
        return giveWeiXinCommonAttribute();
    }

    /**
     * 功能描述：配置微信存储
     *
     * @author : 王雷
     * @date : 2021/1/18 0018 下午 3:17
     */
    @Override
    public final IWeiXinAttributeStore storeConfig() {
        return giveWeiXinAttributeStore();
    }

    /**
     * 功能描述：微信存储接口对象
     *
     * @date : 2022/7/22 0022 下午 6:11
     */
    protected IWeiXinAttributeStore giveWeiXinAttributeStore(){
        //默认的存储对象
        return new WeiXinInStorageService(attributeConfig()) {

            /**
             * 功能描述：根据指定的支付账号标识获取支付对象信息
             *
             * @param mchId 支付账号标识
             * @return 对应存储的配置信息
             * @throws RuntimeException 运行时异常
             * @author : 王雷
             * @date : 2021/1/18 0018 上午 11:14
             */
            @Override
            public IWeiXinAttributeItem.MchDataBean giveWeiXinPayMchDataBean(String mchId) throws WeiXinRuntimeException {
                return null;
            }
        };
    }

    /**
     * 功能描述：配置微信通讯
     *
     * @author : 王雷
     * @date : 2021/1/18 0018 下午 3:17
     */
    @Override
    public final IWeiXinInteraction interactionConfig() {
        return giveWeiXinInteraction();
    }

    /**
     * 功能描述：微信通讯接口对象
     *
     * @date : 2022/7/22 0022 下午 6:11
     */
    protected IWeiXinInteraction giveWeiXinInteraction(){
        return new CustomizeDefaultInteraction(null);
    }

    /**
     * 功能描述：配置微信业务处理对象
     *
     * @author : 王雷
     * @date : 2021/1/18 0018 下午 3:17
     */
    @Override
    public final IWeiXinManagerService managerConfig() {
        return giveWeiXinManagerService();
    }

    /**
     * 功能描述：微信业务处理接口对象
     *
     * @date : 2022/7/22 0022 下午 6:11
     */
    protected IWeiXinManagerService giveWeiXinManagerService(){
        return new WeiXinWebManagerService(interactionConfig(), storeConfig());
    }

    /**
     * 类描述: 自定义通讯抽象
     *
     * @author : 王雷
     * @date : 2022/6/27 0027 下午 10:15
     */
    protected static class CustomizeDefaultInteraction extends DefaultInteraction {

        /**
         * 属性描述：自定义通讯抽象
         *
         * @date : 2022/6/27 0027 下午 10:15
         */
        public CustomizeDefaultInteraction(IHttpRestTemplateManager iHttpRestTemplateManager) {
            super(iHttpRestTemplateManager);
        }
    }
}
